home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DATETIME.SWG / 0034_Clocks.pas < prev    next >
Pascal/Delphi Source File  |  1994-01-27  |  2KB  |  77 lines

  1. {
  2. ▒> Does anyone know how to make a clock (ie....working second to second)
  3.  
  4. You can use the clock from the Gadgets unit included with BP7.
  5. }
  6.  
  7. type
  8.   PClockView = ^TClockView;
  9.   TClockView = object(TView)
  10.     Refresh: Byte;
  11.     LastTime: DateTime;
  12.     TimeStr: string[13];
  13.     constructor Init(var Bounds: TRect);
  14.     procedure Draw; virtual;
  15.     function FormatTimeStr(M, S: Word): String; virtual;
  16.     procedure Update; virtual;
  17.   end;
  18.  
  19. function LeadingZero(w: Word): String;
  20. var s: String;
  21. begin
  22.   Str(w:0, s);
  23.   LeadingZero := Copy('00', 1, 2 - Length(s)) + s;
  24. end;
  25.  
  26. constructor TClockView.Init(var Bounds: TRect);
  27. begin
  28.   inherited Init(Bounds);
  29.   FillChar(LastTime, SizeOf(LastTime), #$FF);
  30.   TimeStr := '';
  31.   Refresh := 1;
  32. end;
  33.  
  34. procedure TClockView.Draw;
  35. var
  36.   B: TDrawBuffer;
  37.   C: Byte;
  38. begin
  39.   C := GetColor(2);
  40.   MoveChar(B, ' ', C, Size.X);
  41.   MoveStr(B, TimeStr, C);
  42.   WriteLine(0, 0, Size.X, 1, B);
  43. end;
  44.  
  45. procedure TClockView.Update;
  46. var
  47.   h,m,s,hund: word;
  48.   AmPmStr : STRING;
  49.   vTmpStr : STRING;
  50. begin
  51.   GetTime(h,m,s,hund);
  52.   if Abs(s - LastTime.sec) >= Refresh then
  53.   begin
  54.     with LastTime do
  55.       begin
  56.         IF ((H >= 12) AND (H < 24)) THEN
  57.           AmPmStr := ' p.m.'
  58.         ELSE
  59.           AmPmStr := ' a.m.';
  60.         IF H > 12 THEN
  61.           H := H - 12;
  62.         IF H = 0 THEN
  63.           H := 12;
  64.       end;
  65.     Str(H : 2, vTmpStr);
  66.     TimeStr := vTmpStr + FormatTimeStr(m, s) + AmPmStr;
  67.     DrawView;
  68.   end;
  69. end;
  70.  
  71. function TClockView.FormatTimeStr(M, S: Word): String;
  72. begin
  73.   FormatTimeStr := ':'+ LeadingZero(m) +
  74.     ':' + LeadingZero(s);
  75. end;
  76.  
  77.